home *** CD-ROM | disk | FTP | other *** search
/ Windows Game Programming for Dummies (2nd Edition) / WinGamProgFD.iso / mac / DirectX SDK / DXSDK / samples / Multimedia / Direct3D / Water / CEnvironment.cpp next >
C/C++ Source or Header  |  2001-10-08  |  4KB  |  179 lines

  1. //
  2. // CEnvironment
  3. // Copyright (c) 2000-2001 Microsoft Corporation. All rights reserved.
  4. //
  5.  
  6. #include <d3dx8.h>
  7. #include "CEnvironment.h"
  8.  
  9.  
  10.  
  11. //////////////////////////////////////////////////////////////////////////////
  12. // Types /////////////////////////////////////////////////////////////////////
  13. //////////////////////////////////////////////////////////////////////////////
  14.  
  15. #pragma pack(4)
  16. typedef struct ENV_VERTEX
  17. {
  18.     D3DXVECTOR3 m_vecPos;
  19.     D3DXVECTOR2 m_vecTex;
  20. } ENV_VERTEX;
  21.  
  22. #define ENV_FVF (D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE2(0))
  23.  
  24.  
  25.  
  26.  
  27. //////////////////////////////////////////////////////////////////////////////
  28. // CEnvironment implementation ///////////////////////////////////////////////
  29. //////////////////////////////////////////////////////////////////////////////
  30.  
  31. CEnvironment::CEnvironment()
  32. {
  33.     m_fSize = 1.0f;
  34.     m_pDevice = NULL;
  35.  
  36.     memset(m_pSurf, 0x00, sizeof(m_pSurf));
  37. }
  38.  
  39.  
  40. CEnvironment::~CEnvironment()
  41. {
  42. }
  43.  
  44.  
  45. HRESULT
  46. CEnvironment::Initialize(float fSize)
  47. {
  48.     m_fSize = fSize;
  49.     return S_OK;
  50. }
  51.  
  52.  
  53. HRESULT 
  54. CEnvironment::OnCreateDevice(IDirect3DDevice8* pDevice)
  55. {
  56.     m_pDevice = pDevice;
  57.     return S_OK;
  58. }
  59.  
  60.  
  61. HRESULT
  62. CEnvironment::OnResetDevice()
  63. {
  64.     return S_OK;
  65. }
  66.  
  67.  
  68. HRESULT
  69. CEnvironment::OnLostDevice()
  70. {
  71.     return S_OK;
  72. }
  73.  
  74.  
  75. HRESULT
  76. CEnvironment::OnDestroyDevice()
  77. {
  78.     return S_OK;
  79. }
  80.  
  81.  
  82. HRESULT 
  83. CEnvironment::SetSurfaces(
  84.     IDirect3DTexture8* pXNeg, IDirect3DTexture8* pXPos, 
  85.     IDirect3DTexture8* pYNeg, IDirect3DTexture8* pYPos,
  86.     IDirect3DTexture8* pZNeg, IDirect3DTexture8* pZPos)
  87. {
  88.     m_pSurf[0] = pXNeg;
  89.     m_pSurf[1] = pXPos;
  90.     m_pSurf[2] = pYNeg;
  91.     m_pSurf[3] = pYPos;
  92.     m_pSurf[4] = pZNeg;
  93.     m_pSurf[5] = pZPos;
  94.  
  95.     return S_OK;
  96. }
  97.  
  98.  
  99. HRESULT
  100. CEnvironment::Draw()
  101. {
  102.     float f;
  103.     ENV_VERTEX vert[4];
  104.  
  105.     f = 0.5f / 512.0f;
  106.  
  107.     vert[0].m_vecTex = D3DXVECTOR2(0.0f + f, 0.0f + f);
  108.     vert[1].m_vecTex = D3DXVECTOR2(0.0f + f, 1.0f - f);
  109.     vert[2].m_vecTex = D3DXVECTOR2(1.0f - f, 0.0f + f);
  110.     vert[3].m_vecTex = D3DXVECTOR2(1.0f - f, 1.0f - f);
  111.  
  112.     m_pDevice->SetVertexShader(ENV_FVF);
  113.     f = m_fSize * 0.5f;
  114.  
  115.  
  116.     // XNeg
  117.     vert[0].m_vecPos = D3DXVECTOR3(-f,  f,  f);
  118.     vert[1].m_vecPos = D3DXVECTOR3(-f, -f,  f);
  119.     vert[2].m_vecPos = D3DXVECTOR3(-f,  f, -f);
  120.     vert[3].m_vecPos = D3DXVECTOR3(-f, -f, -f);
  121.  
  122.     m_pDevice->SetTexture(0, m_pSurf[0]);
  123.     m_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, (LPVOID) vert, sizeof(ENV_VERTEX));
  124.  
  125.  
  126.     // XPos
  127.     vert[0].m_vecPos = D3DXVECTOR3( f,  f, -f);
  128.     vert[1].m_vecPos = D3DXVECTOR3( f, -f, -f);
  129.     vert[2].m_vecPos = D3DXVECTOR3( f,  f,  f);
  130.     vert[3].m_vecPos = D3DXVECTOR3( f, -f,  f);
  131.  
  132.     m_pDevice->SetTexture(0, m_pSurf[1]);
  133.     m_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, (LPVOID) vert, sizeof(ENV_VERTEX));
  134.  
  135.  
  136.     // YNeg
  137.     vert[1].m_vecPos = D3DXVECTOR3(-f, -f, -f);
  138.     vert[3].m_vecPos = D3DXVECTOR3(-f, -f,  f);
  139.     vert[0].m_vecPos = D3DXVECTOR3( f, -f, -f);
  140.     vert[2].m_vecPos = D3DXVECTOR3( f, -f,  f);
  141.  
  142.     m_pDevice->SetTexture(0, m_pSurf[2]);
  143.     m_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, (LPVOID) vert, sizeof(ENV_VERTEX));
  144.  
  145.     
  146.     // YPos
  147.     vert[0].m_vecPos = D3DXVECTOR3(-f,  f,  f);
  148.     vert[1].m_vecPos = D3DXVECTOR3(-f,  f, -f);
  149.     vert[2].m_vecPos = D3DXVECTOR3( f,  f,  f);
  150.     vert[3].m_vecPos = D3DXVECTOR3( f,  f, -f);
  151.  
  152.     m_pDevice->SetTexture(0, m_pSurf[3]);
  153.     m_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, (LPVOID) vert, sizeof(ENV_VERTEX));
  154.  
  155.  
  156.     // ZNeg
  157.     vert[0].m_vecPos = D3DXVECTOR3(-f,  f, -f);
  158.     vert[1].m_vecPos = D3DXVECTOR3(-f, -f, -f);
  159.     vert[2].m_vecPos = D3DXVECTOR3( f,  f, -f);
  160.     vert[3].m_vecPos = D3DXVECTOR3( f, -f, -f);
  161.  
  162.     m_pDevice->SetTexture(0, m_pSurf[4]);
  163.     m_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, (LPVOID) vert, sizeof(ENV_VERTEX));
  164.  
  165.  
  166.     // ZPos
  167.     vert[0].m_vecPos = D3DXVECTOR3( f,  f,  f);
  168.     vert[1].m_vecPos = D3DXVECTOR3( f, -f,  f);
  169.     vert[2].m_vecPos = D3DXVECTOR3(-f,  f,  f);
  170.     vert[3].m_vecPos = D3DXVECTOR3(-f, -f,  f);
  171.  
  172.     m_pDevice->SetTexture(0, m_pSurf[5]);
  173.     m_pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, (LPVOID) vert, sizeof(ENV_VERTEX));
  174.  
  175.     return S_OK;
  176. }
  177.  
  178.  
  179.